package com.karry.mapper;

import com.karry.pojo.Type;
import org.apache.ibatis.annotations.*;

import java.util.ArrayList;
import java.util.List;

public interface TypeMapper {

    //查询全部
    @Select("select * from tb_type;")
    @ResultMap("typeResultMap")
    List<Type> searchAllType();

    /**
     *  查询类型列表，要求未删除
     * */
    @Select("select * from tb_type where t_user_id = #{id}  and t_status = 1;")
    @ResultMap("typeResultMap")
    List<Type> searchTypeListByUserID(@Param("id") int id);

    /**
     *  根据ID查询类型
     * */
    @Select("select * from tb_type where t_id = #{tId} and t_status = 1;")
    @ResultMap("typeResultMap")
    Type getTypeById(int tId);

    //无视状态查询类型通过ID
    @Select("select * from tb_type where t_id = #{tId};")
    @ResultMap("typeResultMap")
    Type getType(int tId);

    /**
     *  逻辑删除类型（若该类型下有博客，在按类型分类时依然显示此类型）
     * */
    @Update("update tb_type set t_status = 0 where t_id = #{typeId};")
    int deleteType(int typeId);

    //恢复类型
    @Update("update tb_type set t_status = 1 where t_id = #{typeId};")
    int liveType(int id);

    /**
     *  判断某id类型是否存在，用来区分删除和修改操作
     * */
    @Select("select * from tb_type where t_id = #{typeId};")
    @ResultMap("typeResultMap")
    Type searchTypeById(Integer typeId);

    /**
     *  获取某个用户拥有类型总数
     */
    @Select("select count(*) from tb_type where t_user_id = #{id};")
    int getUserTypeCount(int id);

    /**
     *  更修改型名
     * */
    @Update("update tb_type set t_name = #{name} where t_id = #{id};")
    int updateType(@Param("name") String typeName, @Param("id") Integer typeId);

    /**
     *  插入新类型
     * */
    @Insert("insert into tb_type (t_name, t_user_id, t_user_type_id) values (#{name}, #{id}, #{userTypeId});")
    int insertType(@Param("name") String typeName, @Param("id") int id, @Param("userTypeId") int i);

    /**
     *  判断类型名是否存在
     * */
    @Select("select count(*) from tb_type where t_user_id = #{id} and t_name = #{name};")
    int searchTypeNameExits(@Param("id") int id, @Param("name") String typeName);

    @Select("select count(*) from tb_type;")
    int getTypeCount();


    @Select("select * from tb_type limit #{i}, 10;")
    @ResultMap("typeResultMap")
    ArrayList<Type> getAllTypeListByPage(int i);
}
